import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description: 牛客网: BC134 蛇形矩阵
 * <a href="https://www.nowcoder.com/practice/f228a074c5274619b26be544962375e1?tpId=290&tqId=39922&ru=/exam/oj">...</a>
 * User: DELL
 * Date: 2023-08-17
 * Time: 23:20
 */
public class Main {
    /**
     * 解题思路: (找规律)
     * 根据蛇形矩阵中数字蛇形递增的规律,我们可以根据递增的方向初始化对应的矩阵.
     * 那么不难发现移动的方向只有左上和右下,还有就是遇到边界的拐弯.那么我们可以
     * 定义一个 pos,   当 pos == 1 时,是向右上移动
     *               当 pos == -1 时.是向左下移动
     * 遇到边界又分为以下四种情况:
     *      遇到上边界(i == 0 && pos == 1): 向右移动
     *      遇到左边界(j == 0 && pos == -1): 向下移动
     *      遇到下边界(i == n-1 && pos == -1): 向右移动
     *      遇到右边界(j == n-1 && pos == 1): 向下移动
     * 这个当中又有两个特例,即右上角和左下角:
     *      遇到右上角: 向下移动
     *      遇到左下角, 向右移动
     * 这样子我们不难发现,其实右上角和右边界的移动方向一样,
     * 左下角和下边界的移动方向一样,那么我们可以这样子设定,
     * 即将右上角归为右边界,左下角归为下边界即可.
     * 具体的实现就是再利用 if-else判断的时候,先判断是否为
     * 右边界和下边界即可.
     * 根据以上规律遍历初始化数组即可.
     * 
     * 总结这种打印特定图案的代码题,本质就是找规律,找到规律就好写了.
     * @param args
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int i = 0;
        int j = 0;
        int[][] board = new int[n][n];
        // pos 表示移动的方向
        // pos == 1 代表右上方向
        // pos == -1 代表左下方向
        int pos = 1;
        for (int k = 1; k <= n*n; k++) {
            if (j == n-1 && pos == 1) {
                // 右边界
                board[i++][j] = k;
                pos *= -1;
            } else if (i == n-1 && pos == -1) {
                //下边界
                board[i][j++] = k;
                pos *= -1;
            } else if (i == 0 && pos == 1) {
                // 上边界
                board[i][j++] = k;
                pos *= -1;
            } else if (j == 0 && pos == -1) {
                // 左边界
                board[i++][j] = k;
                pos *= -1;
            } else if (pos == 1) {
                // 右上方向
                board[i--][j++] = k;
            } else {
                // 左下方向
                board[i++][j--] = k;
            }
        }
        // 打印
        for (i = 0; i < n; i++) {
            for (j = 0; j < n; j++) {
                System.out.print(board[i][j] + " ");
            }
            System.out.println();
        }
    }
}